GtkButton: Don't suppress unhandled mouse events
authorBastien Nocera <hadess@hadess.net>
Tue, 26 Mar 2013 13:22:10 +0000 (14:22 +0100)
committerBastien Nocera <hadess@hadess.net>
Sat, 18 May 2013 12:49:55 +0000 (14:49 +0200)
Mouse events that we do not handle should bubble up to the parent
widget, so they can be handled there, instead of disappearing inside
the button. Also use GDK_EVENT_{STOP,PROPAGATE} to make return
values clearer.

https://bugzilla.gnome.org/show_bug.cgi?id=696640

gtk/gtkbutton.c

index 9db30cd4fdbe7e086b7b45a68c051625ef1d917b..7f38b49b4627668dc0d1b8f6a35a78e1e31fb0ff 100644 (file)
@@ -1818,10 +1818,13 @@ gtk_button_button_press (GtkWidget      *widget,
        gtk_widget_grab_focus (widget);
 
       if (event->button == GDK_BUTTON_PRIMARY)
-        g_signal_emit (button, button_signals[PRESSED], 0);
+        {
+          g_signal_emit (button, button_signals[PRESSED], 0);
+          return GDK_EVENT_STOP;
+        }
     }
 
-  return TRUE;
+  return GDK_EVENT_PROPAGATE;
 }
 
 static gboolean
@@ -1834,9 +1837,10 @@ gtk_button_button_release (GtkWidget      *widget,
     {
       button = GTK_BUTTON (widget);
       g_signal_emit (button, button_signals[RELEASED], 0);
+      return GDK_EVENT_STOP;
     }
 
-  return TRUE;
+  return GDK_EVENT_PROPAGATE;
 }
 
 static gboolean
@@ -1852,13 +1856,15 @@ gtk_button_touch (GtkWidget     *widget,
         gtk_widget_grab_focus (widget);
 
       g_signal_emit (button, button_signals[PRESSED], 0);
+      return GDK_EVENT_STOP;
     }
   else if (event->type == GDK_TOUCH_END)
     {
       g_signal_emit (button, button_signals[RELEASED], 0);
+      return GDK_EVENT_STOP;
     }
 
-  return TRUE;
+  return GDK_EVENT_PROPAGATE;
 }
 
 static gboolean